package hoe;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Bejelentkezés kiszolgáló.
 *
 * @author imruf84
 */
public class LoginServlet extends HttpServletWithUserValidator {
 
    @Override
    public void validateUser(HttpServletRequest request, HttpServletResponse response, User user, int requestType) throws IOException {
        
        // Ha a felhasználó hitelesítve van akkor átirányítjuk a játékhoz.
        if (null != user) {
            response.sendRedirect(HttpServer.PLAY_PATH);
            return;
        }
        
        // Egyébként beléptetjük.
        response.setContentType("text/html");
        response.setStatus(HttpServletResponse.SC_OK);
        appendLoginPage(response);
    }
    
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        // Felhasználónév lekérdezése a kérelemből.
        String username = request.getParameter("username");
        
        // Ha nincs megadva felhasználónév, akkor hibával kilépünk.
        if (username.isEmpty()) {
            response.setContentType("text/html");
            response.setStatus(HttpServletResponse.SC_OK);
            response.getWriter().append("Felhasználónév megadása kötelező!<br>");
            appendLoginPage(response);
            return;
        }
        
        // Névhez tartozó felhasználó lekérdezése.
        User user = UserManager.getUserByName(username);
        
        // Ha már van ilyen néven felhasználó, akkor hibával kilépünk.
        if (null != user) {
            response.setContentType("text/html");
            response.setStatus(HttpServletResponse.SC_OK);
            response.getWriter().append("Már létezik felhasználó ilyen névvel!<br>");
            appendLoginPage(response);
            return;
        }
             
        // Egyébként beléptetjük a felhasználót és átirányítjuk a játékhoz.
        UserManager.loginUser(request, new User(request.getSession().getId(), username));
        response.sendRedirect(HttpServer.PLAY_PATH);
    }
    
    /**
     * Bejelentkező oldal létrehozása.
     * 
     * @param response válasz
     * @throws IOException kivétel
     */
    private void appendLoginPage(HttpServletResponse response) throws IOException {
        response.getWriter().append("<!DOCTYPE html><html><head><meta charset='UTF-8'></head><body style='font-family: Arial'><form method='POST' action='/login'>név: <input id='userNameInput' type='text' name='username'/><input type='submit' value='Login'/><script>document.getElementById('userNameInput').focus();</script></form></body></html>");
    }
    
}
